package com.fowo.api.model.receivable;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fowo.api.common.validator.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
import lombok.Getter;
import lombok.Setter;

/**
 * 应收单 预览导入辅助模型(全字段为文本类型)
 * @author yl_ls
 */
@Getter
@Setter
public class ReceivableImportPo {

  /** 单据编号 */
  @ExcelProperty("单据编号")
  private String payCode;

  /** 单据类型 */
  @ExcelProperty("单据类型")
  private String type;

  /** 客户 */
  @ExcelProperty("*客户")
  @NotBlank(message = "客户不能为空")
  @Size(max = 50, message = "客户长度不能超过50")
  private String customerSupplierName;

  @ExcelIgnore
  @Schema(title = "*客户")
  private String customer;

  /** 金额 */
  @ExcelProperty("金额")
  private String totalAmount;

  /** 数量 */
  @ExcelProperty("数量")
  private String totalNum;

  /** 币种 */
  @ExcelProperty("币种")
  private String currency;

  /** 结算组织 */
  @ExcelProperty("结算组织")
  @Size(max = 50, message = "结算组织长度不能超过50")
  private String closeOrgName;

  @ExcelIgnore
  @Schema(title = "结算组织")
  private String closeOrg;

  /** 收款组织 */
  @ExcelProperty("收款组织")
  @Size(max = 50, message = "收款组织长度不能超过50")
  private String receiptOrgName;

  @ExcelIgnore
  @Schema(title = "收款组织")
  private String receiptOrg;

  /** 立账类型 */
  @ExcelProperty("立账类型")
  @Size(max = 50, message = "立账类型长度不能超过50")
  private String accountType;

  /** 业务日期 */
  @ExcelProperty("*业务日期")
  @NotBlank(message = "业务日期不能为空")
  @DateTimeString(message = "业务日期不是有效的时间日期格式")
  private String businessDate;

  /** 到期日 */
  @ExcelProperty("到期日")
  @DateTimeString(message = "到期日不是有效的时间日期格式")
  private String dueDate;

  /** 收款条件 */
  @ExcelProperty("收款条件")
  private String receiptTerms;

  /** 订货方 */
  @ExcelProperty("订货方")
  @Size(max = 50, message = "订货方长度不能超过50")
  private String ordererSupplierName;

  @ExcelIgnore
  @Schema(title = "订货方")
  private String orderer;

  /** 收货方 */
  @ExcelProperty("收货方")
  @Size(max = 50, message = "收货方长度不能超过50")
  private String consigneeSupplierName;

  @ExcelIgnore
  @Schema(title = "收货方")
  private String consignee;

  /** 付款方 */
  @ExcelProperty("付款方")
  @Size(max = 50, message = "付款方长度不能超过50")
  private String payerSupplierName;

  @ExcelIgnore
  @Schema(title = "付款方")
  private String payer;

  /** 备注 */
  @ExcelProperty("备注")
  @Size(max = 500, message = "备注长度不能超过500")
  private String remark;

  /** 产品类型 */
  @ExcelProperty("*产品类型")
  @NotBlank(message = "产品类型不能为空")
  @EnumsString(
    value = { "原材料", "成品" },
    message = "产品类型只能是“原材料”, “成品”中的一个"
  )
  private String productType;

  /** 状态 */
  @ExcelProperty("状态")
  private String status;

  /** 推送状态 */
  @ExcelProperty("推送状态")
  @EnumsString(
    value = { "未推送", "成功", "失败" },
    message = "推送状态只能是“未推送”, “成功”, “失败”中的一个"
  )
  private String pushStatus;

  /** 推送信息 */
  @ExcelProperty("推送信息")
  @Size(max = 50, message = "推送信息长度不能超过50")
  private String resultInfo;

  /** 制单人 */
  @ExcelProperty("制单人")
  @Size(max = 50, message = "制单人长度不能超过50")
  private String preparedByName;

  @ExcelIgnore
  @Schema(title = "制单人")
  private String preparedBy;

  /** 审核人 */
  @ExcelProperty("审核人")
  @Size(max = 50, message = "审核人长度不能超过50")
  private String verifierName;

  @ExcelIgnore
  @Schema(title = "审核人")
  private String verifier;

  /** 采购单号 */
  @ExcelProperty("采购单号")
  @Size(max = 50, message = "采购单号长度不能超过50")
  private String purchaseOrder;

  /** 出库单号 */
  @ExcelProperty("出库单号")
  @Size(max = 50, message = "出库单号长度不能超过50")
  private String warehouseSn;
}
